ivantracefandomcom_es-20200215-history
Reunión con el grupo de paralelos
Primera reunión (26-3-2012) El grupo de profesores e investigadores del laboratorio de computadores paralelos que están relacinados con los medidores de energia que tenemos en el laboratorio nos hemos reunido para definir los siguientes pasos. De forma general hemos definido cuales son todos los medidores que se disponen y sus características, además de su método de funcionamiento. Hasta ahora cada medidor funciona con su demonio y al pedirle los datos funcione de la forma que se le asigno al instalarlo. Ahora se desea que todos los medidores funcionen de la misma forma y que accediendo a un demonio se puedan adquirir datos de cualquier de los medidores. Por ahora solo se ha definido la arquitectura del demonio, que accederá a los datos de los medidores de forma que cada procesos puede pedir en cualquier momento datos de cualquier medidor o de un grupo de lineas en particular, también se puede obtener el total o los datos separados de cada linea. El demonio debe soportar que dos procesos accedan a los datos de un medidor al mismo tiempo. También se ha definido como debe ser la biblioteca de este demonio (cliente y sevidor), esto se nos ha asignado a Maria, Sandra y a mi. Por lo que debemos crear un documento en el que se enumeren todas las funciones que deben existir, sus firmas y una breve explicación de su funcionamiento. Definición de las funciones Maria, Sandra y yo hemos definido las funciones que se decidieron en la reunión que formarían parte de la nueva biblioteca. Con el Doxygen hemos creado la documentación de forma automática. Segunda reunión (3-4-2012) Se han comentado cada una de las funciones que definimos y se han corregido los errores, poniendo en cmún las opiniones de todo el equipo. Además se ha mostrado por parte de otros miembros del equipo como será el documento que definirá cada máquina y medidor que disponemos y el protocolo que se seguira para la recogida de datos y comunicación entre cliente y servidor (demonio). Corrección de errores e información de macros Se ha refinado la documentación de las funciones, borrando las que se ha acordado en la reunión y creando algunas de nuevas. En el .h se han definido nuevas estructuras de datos para almacenar datos que necesitaremos a partir de ahora. Información sobre las macros: Tots els codis estàn extrets dels fitxers: /usr/include/sched.h /usr/include/bits/sched.h ------------------------------ ------------------------------------------------ /* Size definition for CPU sets. */ # define __CPU_SETSIZE 1024 # define __NCPUBITS (8 * sizeof (__cpu_mask)) /* Type for array elements in 'cpu_set_t'. */ typedef unsigned long int __cpu_mask; /* Basic access functions. */ # define __CPUELT(cpu) ((cpu) / __NCPUBITS) # define __CPUMASK(cpu) ((__cpu_mask) 1 << ((cpu) % __NCPUBITS)) /* Data structure to describe CPU mask. */ typedef struct { __cpu_mask __bits/ __NCPUBITS; } cpu_set_t; # define CPU_SET(cpu, cpusetp) __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp) # if __GNUC_PREREQ (2, 91) # define __CPU_ZERO_S(setsize, cpusetp) \ do __builtin_memset (cpusetp, '\0', setsize); while (0) # else # define __CPU_ZERO_S(setsize, cpusetp) \ do { \ size_t __i; \ size_t __imax = (setsize) / sizeof (__cpu_mask); \ __cpu_mask *__bits = (cpusetp)->__bits; \ for (__i = 0; __i < __imax; ++__i) \ __bits__i = 0; \ } while (0) # endif # define __CPU_SET_S(cpu, setsize, cpusetp) \ (__extension__ \ ({ size_t __cpu = (cpu); \ __cpu < 8 * (setsize) \ ? (((__cpu_mask *) ((cpusetp)->__bits))(__cpu) \ |= __CPUMASK (__cpu)) \ : 0; })) # define __CPU_CLR_S(cpu, setsize, cpusetp) \ (__extension__ \ ({ size_t __cpu = (cpu); \ __cpu < 8 * (setsize) \ ? (((__cpu_mask *) ((cpusetp)->__bits))(__cpu) \ &= ~__CPUMASK (__cpu)) \ : 0; })) # define __CPU_ISSET_S(cpu, setsize, cpusetp) \ (__extension__ \ ({ size_t __cpu = (cpu); \ __cpu < 8 * (setsize) \ ? ((((__const __cpu_mask *) ((cpusetp)->__bits))(__cpu) \ & __CPUMASK (__cpu))) != 0 \ : 0; })) # define CPU_SET(cpu, cpusetp) __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp) # define CPU_CLR(cpu, cpusetp) __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp) # define CPU_ISSET(cpu, cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), \ cpusetp) # define CPU_ZERO(cpusetp) __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp) ------------------------------------------------------------------------------ Programa d'usuari: // Declaració de la màscara cpu_set cpu_set_t cpu_set; // Estableix tots els bits de la máscara a 0 CPU_ZERO( &cpu_set ); // Estableix a 1 el i-èsim bit CPU_SET( i, &cpu_set ); // Estableix a 0 el i-èsim bit CPU_CLR( i, &cpu_set ); // Consulta si el i-èsim bit està actiu CPU_ISSET( i, &cpu_set ); La idea es que feu una gestió similar, però en lloc de CPUs o "cores" adapteu el codi perquè siguen línies o canals dels medidors d'energia. Podeu consultar els fitxers originals per més informació.